/******************************************************************************/
/***                                                                        ***/
/***  SProutines.h                                                          ***/
/***                                                                        ***/
/***  Include for use with the "Software Protection Scheme" example code.   ***/
/***                                                                        ***/
/***  Contains general definitions used for the standard part of the        ***/
/***  application.                                                          ***/
/***                                                                        ***/
/***                                                                        ***/
/***                                                                        ***/
/***  Written by N.Critchell, Acorn Computers            18th October 1991  ***/
/***                                                                        ***/
/******************************************************************************/





/******************************************************************************/
/******************************************************************************/
/******                                                                  ******/
/******     Standard #defines                                            ******/
/******                                                                  ******/
/******************************************************************************/
/******************************************************************************/

#define FALSE   0
#define TRUE    1

#define LEFT_BUTTON                     0x4
#define MIDDLE_BUTTON                   0x2
#define RIGHT_BUTTON                    0x1






/******************************************************************************/
/******************************************************************************/
/******                                                                  ******/
/******     System, and Wimp SWI calls                                   ******/
/******                                                                  ******/
/******************************************************************************/
/******************************************************************************/

#define OS_WriteC                       0x00
#define OS_ReadC                        0x04
#define OS_Byte                         0x06
#define OS_Word                         0x07
#define OS_Mouse                        0x1C
#define OS_ReadVarVal                   0x23
#define OS_ReadModeVariable             0x35
#define OS_ReadSysInfo  0x58

#define Wimp_CreateWindow               0x400C1
#define Wimp_DeleteWindow               0x400C3
#define Wimp_OpenWindow                 0x400C5
#define Wimp_RedrawWindow               0x400C8
#define Wimp_GetRectangle               0x400CA
#define Wimp_GetWindowState             0x400CB
#define Wimp_SetIconState               0x400CD
#define Wimp_GetIconState               0x400CE
#define Wimp_GetPointerInfo             0x400CF
#define Wimp_SetCaretPosition           0x400D2

#define ADFS_DiscOp                     0x40240
#define ADFS_DescribeDisc               0x40245

#define NFS_MountInfo                   0x410C4




/******************************************************************************/
/******************************************************************************/
/******                                                                  ******/
/******     Global Variable Definitions                                  ******/
/******                                                                  ******/
/******************************************************************************/
/******************************************************************************/

extern char Reg_Number[17];
extern char LicenceHolder[40];





/******************************************************************************/
/******************************************************************************/
/******                                                                  ******/
/******     SP Scheme's structure definitions                            ******/
/******                                                                  ******/
/******************************************************************************/
/******************************************************************************/

typedef struct  {
                int             ID_word[2];
                int             CheckSum[2];
                } ID;

typedef struct  {
                char            Reg_Byte[10];
                } REG_NO;





/******************************************************************************/
/******************************************************************************/
/******                                                                  ******/
/******     Function Prototypes for SPscheme.c code                      ******/
/******                                                                  ******/
/******************************************************************************/
/******************************************************************************/

int SoftwareProtectionScheme(int *);


int SP_ViolationWarningDBox(int *);
void Configure_Application(void);






/******************************************************************************/
/******************************************************************************/
/******                                                                  ******/
/******     Function Prototypes for SProutines.c code                    ******/
/******                                                                  ******/
/******************************************************************************/
/******************************************************************************/

int ReadStoredIDNumbers(ID *);
int StoreIDNumbers(ID *id, REG_NO *);
int StoreIDNumbersToOriginalDisc(ID *id, REG_NO *);
void DecodeIDNumbers(ID *);
void EncodeIDNumbers(ID *);
void CalculateRegNo(ID *, REG_NO *);
void ReadSystemIDNumber(ID *);
void SetApplicationRegistrationNumber(REG_NO *, int);


/******************************************************************************/
/***  GetIDStatus                                                           ***/
/******************************************************************************/

int GetIDStatus(void);

#define ID_STATUS__IDENTICAL            0x0000
#define ID_STATUS__NOT_CONFIGURED       0x0001
#define ID_STATUS__NOT_EXIST            0x0002
#define ID_STATUS__INVALID              0x0003






int  Create_Window(char *);
void ChangeWindowTitle(char *, char  *, char *);
void ChangeIndirectedData(char *, int, int, char[]);
void SetLicenceHolderIcon(int, int, char[], int);
void Set_Deferred_Data_Pointers(char *, char *, char *);
void Open_Window(int);
void Delete_Window(int);
int  Wait_For_Icon_Selection(int, int, int, int);
char ReadCharFromKeyboard(void);
int  check_icon_area(int, int, int);
int  EOR(int, int);
void EorDataBlock(char *, char, char, int);
void UnEorDataBlock(char *, char, char, int);
void bound_mouse_to_window(int);
void bound_mouse_to_screen(void);
int  ReadModeXsize(void);
int  ReadModeYsize(void);
int  EnsureMasterDiscInDrive(ID *, REG_NO *, int *);
int  RunningOnMasterDisc(void);
int  ReadIDFromMasterDisc(ID *, REG_NO *, int, int *);
int  WriteIDToMasterDisc(ID *id, REG_NO *, int);
void Build_Special_Disc_Record(char *);
int  ReadSpecialSector(char *, char *);
int  WriteSpecialSector(char *, char *);
void IO_Error(void);
void Belch(void);
void OldSyetem_KeyDiscSupport(void);

int  RunningOnNet(char *);
void ConfigureFS(char *);
int  Cmp_FileServerNames(char *);
void GetNFSServerName(char *);
